import axios from 'axios'
import { Message, MessageBox } from 'element-ui'

// 请求的公共前缀
axios.defaults.baseURL = 'http://127.0.0.1:3003/api/v1/'
// 超时时间
axios.defaults.timeout = 15000

// 请求拦截
axios.interceptors.request.use(config => {
  // 认证的Token
  config.headers.Authorization = sessionStorage.getItem('token')
  return config
}, err => {
  console.log(err)
  Promise.reject(err)
})

// 响应拦截
axios.interceptors.response.use(function (resp) {
  // 响应码
  const code = resp.data.code

  if (code === 200 || code === 201 || code === 204) { // 正常的状态码
    return resp.data
  } else if (code === 401) { // 401, 未认证或过期
    MessageBox.alert(
      '登录状态已过期，请重新登录',
      '系统提示',
      {
        confirmButtonText: '重新登录',
        type: 'warning'
      }
    ).then(() => {
      sessionStorage.clear()
      location.reload() // 重新加载页面，会自动跳转到登录页
    })
    return Promise.reject(new Error('登录状态已过期'))
  } else {
    Message.error(resp.data.msg)
    return Promise.reject(new Error(resp.data))
  }
}, err => {
  // 其他异常响应的处理
  Message.error('接口异常')
  console.log(err)
  return Promise.reject(err)
})

export default axios
